package com.generic.trouble;

import java.util.ArrayList;

/**问题1：
 * 在Java中不允许创建泛型数组，类似下面这样的做法编译器会报错。
 * 接下来我们再来看一下假设Java支持泛型数组的创建会出现什么后果：
List<Integer>[] arrayOfLists = new List<Integer>[2];  // compile-time error
Object[] stringLists = new List<String>[];  // compiler error, but pretend it's allowed
stringLists[0] = new ArrayList<String>();   // OK
// An ArrayStoreException should be thrown, but the runtime can't detect it.
stringLists[1] = new ArrayList<Integer>();
假设我们支持泛型数组的创建，由于运行时期类型信息已经被擦除，JVM实际上根本就不知道new ArrayList<String>()和new ArrayList<Integer>()的区别。类似这样的错误假如出现才实际的应用场景中，将非常难以察觉。
 * @author DELL
 *
 */
public class Demo1 {

	public static void main(String[] args) {

		//如果你对上面这一点还抱有怀疑的话，可以尝试运行下面这段代码：
		Class c1 = new ArrayList<String>().getClass();
        Class c2 = new ArrayList<Integer>().getClass();
        System.out.println(c1 == c2); // true

		//我们先来看一下下面这个例子：
		//对于上面这段代码还是很好理解，字符串数组不能存放整型元素，而且这样的错误往往要等到代码运行的时候才能发现，编译器是无法识别的。接下来我们再来看一下假设Java支持泛型数组的创建会出现什么后果：
		Object[] strings = new String[2];
		strings[0] = "hi";   // OK
		strings[1] = 100;    // An ArrayStoreException is thrown.
	}

}
